#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
模板文件后处理脚本 - 修复转换过程中的遗留问题
"""
import os
import re
from pathlib import Path


def post_process_template(file_path):
    """后处理单个模板文件"""
    print(f"后处理: {file_path}")
    
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()
    
    original_content = content
    
    # 1. 修复错误的 {% url 'static' ... %} 转换
    # {% url 'static' 'path' %} -> {% static 'path' %}
    content = re.sub(
        r"{%\s*url\s+'static'\s+'([^']+)'\s*%}",
        r"{% static '\1' %}",
        content
    )
    
    # 2. 修复重复的 {% if messages %}
    content = re.sub(
        r'{%\s*if\s+messages\s*%}\s*{%\s*if\s+messages\s*%}',
        '{% if messages %}',
        content
    )
    
    # 3. 修复错误的 {% endwith %}
    content = re.sub(
        r'{%\s*endwith\s*%}',
        '{% endif %}',
        content
    )
    
    # 4. 修复消息循环中的category变量
    content = re.sub(
        r"message\.tags\s*==\s*'success'([^}]+)elif\s+category\s*==",
        r"message.tags == 'success'\1elif message.tags ==",
        content
    )
    
    # 5. 确保CSRF token在所有POST表单中
    # 查找没有 csrf_token 的 POST 表单
    def add_csrf_to_forms(match):
        form_content = match.group(0)
        if '{% csrf_token %}' not in form_content and 'csrf_token' not in form_content:
            # 在 <form> 标签后添加 csrf_token
            form_content = re.sub(
                r'(<form[^>]*method\s*=\s*["\']?POST["\']?[^>]*>)',
                r'\1\n    {% csrf_token %}',
                form_content,
                flags=re.IGNORECASE
            )
        return form_content
    
    # 查找所有POST表单并添加CSRF
    content = re.sub(
        r'<form[^>]*method\s*=\s*["\']?POST["\']?[^>]*>.*?</form>',
        add_csrf_to_forms,
        content,
        flags=re.IGNORECASE | re.DOTALL
    )
    
    # 6. 修复图片路径中的static标签
    # <img src="/static/... -> <img src="{% static '...'
    content = re.sub(
        r'<img\s+src=["\']?/static/uploads/([^"\'>\s]+)["\']?',
        r'<img src="{{ MEDIA_URL }}\1"',
        content
    )
    
    # 7. 清理多余的转义字符
    content = content.replace(r'\"', '"')
    
    # 8. 修复 {% url %} 标签中的参数传递
    # {% url 'view' variable %} 确保正确格式
    content = re.sub(
        r"{%\s*url\s+'([^']+)'\s+(\w+)\.(\w+)\s*%}",
        r"{% url '\1' \2.\3 %}",
        content
    )
    
    if content != original_content:
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(content)
        print(f"✓ 已修复: {file_path}")
        return True
    else:
        print(f"- 无需修复: {file_path}")
        return False


def post_process_all_templates(templates_dir):
    """后处理所有模板文件"""
    templates_path = Path(templates_dir)
    
    if not templates_path.exists():
        print(f"错误: 模板目录不存在: {templates_dir}")
        return
    
    html_files = list(templates_path.rglob('*.html'))
    total_files = len(html_files)
    fixed_files = 0
    
    print(f"\n找到 {total_files} 个HTML模板文件")
    print("=" * 60)
    
    for html_file in html_files:
        if post_process_template(html_file):
            fixed_files += 1
    
    print("=" * 60)
    print(f"\n后处理完成!")
    print(f"总文件数: {total_files}")
    print(f"已修复: {fixed_files}")
    print(f"无需修复: {total_files - fixed_files}")


if __name__ == '__main__':
    project_root = Path(__file__).parent
    templates_dir = project_root / 'templates'
    
    print("=" * 60)
    print("Django模板后处理工具")
    print("=" * 60)
    
    post_process_all_templates(templates_dir)
    
    print("\n✅ 所有模板文件已后处理完成!")
